#include <stdio.h>
#include <iostream>

using namespace std;

#include "XML_Document.h"
#include "DTD_Document.h"

extern DTD_Document * getDTDTree();
extern XML_Document * getXMLTree();

extern int xmlparse();
extern int dtdparse();

int main( int argc, char ** argv )
{
	extern FILE * xmlin;
	extern FILE * dtdin;

	FILE * fd;
	int nb_errors;


	/******************** ANALYSE DU FICHIER XML ********************/

	fd = fopen( argv[1], "r" );

	if ( fd == NULL )
	{
		cout << "*** [ERROR] Echec de l'ouverture du fichier XML (" << argv[1] << ") ***" << endl << endl;
		return 1;
	}
	else
	{
		cout << "*** [SUCCESS] Fichier XML (" << argv[1] << ") ouvert avec succes ***" << endl << endl;

		xmlin = fd;
		nb_errors = xmlparse();

		fclose( fd );
		cout << endl;

		if ( nb_errors > 0 )
		{
			cout << "*** [ERROR] Le fichier XML contient " << nb_errors << " erreur(s) ***" << endl << endl;
		}
		else
		{
			cout << "*** [SUCCESS] Fichier XML analyse avec succes ***" << endl << endl;

			// Recuperation et afficahge de l'arbre XML :
			XML_Document * xml_tree = getXMLTree();
			cout << xml_tree->toString() << endl << endl;
		}
	}
	

	/******************** ANALYSE DU FICHIER DTD ********************/

	fd = fopen( argv[2], "r" );

	if ( fd == NULL )
	{
		cout << "*** [ERROR] Echec de l'ouverture du fichier DTD (" << argv[2] << ") ***" << endl << endl;
		return 2;
	}
	else
	{
		cout << "*** [SUCCESS] Fichier DTD (" << argv[2] << ") ouvert avec succes ***" << endl << endl;

		dtdin = fd;
		nb_errors = dtdparse();

		fclose( fd );
		cout << endl;

		if ( nb_errors > 0 )
		{
			cout << "*** [ERROR] Le fichier DTD contient " << nb_errors << " erreur(s) ***" << endl << endl;
		}
		else
		{
			cout << "*** [SUCCESS] Fichier DTD analyse avec succes ***" << endl << endl;

			// Recuperation et afficahge de l'arbre DTD :
			DTD_Document * dtd_tree = getDTDTree();
			cout <<  dtd_tree->toString();
		}
	}
	
	return 0;
}
